In [ ]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_palette("viridis")

df = pd.read_csv('../data/sa/merged_interpolated.csv')
df.datetime = df.datetime.astype('datetime64')
dt = df['datetime'].dt
df['year'] = dt.year
df['month'] = dt.month
df['day'] = dt.day
df['hour'] = dt.hour
df['minute'] = dt.minute
df['day_of_week'] = dt.day_of_week
df['week'] = dt.isocalendar().week
df['week_of_month'] = (dt.day - 1) // 7 # day of month - 1 (0-30) // 7 (0-6=0, 7-13=1, 14-20=2, 21-27=3, 28-x=4)
df.head()
Out[ ]:
datetime tempc cloud8 windk wdir humid rainmm radkjm2 pv_est net_load total_load year month day hour minute day_of_week week week_of_month
0 2018-03-06 09:30:00 20.75 2.5 14.5 135.0 44.5 0.0 1915.0 318.991 1288 1136.79 2018 3 6 9 30 1 10 0
1 2018-03-06 10:00:00 21.50 1.0 16.0 140.0 40.0 0.0 2340.0 375.231 1237 1054.87 2018 3 6 10 0 1 10 0
2 2018-03-06 10:30:00 22.25 1.5 15.5 145.0 37.0 0.0 2570.0 430.909 1189 1002.35 2018 3 6 10 30 1 10 0
3 2018-03-06 11:00:00 23.00 2.0 15.0 150.0 34.0 0.0 2800.0 485.129 1150 971.54 2018 3 6 11 0 1 10 0
4 2018-03-06 11:30:00 23.55 2.0 13.0 145.0 32.0 0.0 2945.0 523.989 1122 943.68 2018 3 6 11 30 1 10 0
In [ ]:
grouped_dow = df.groupby(['day_of_week', 'hour', 'minute'])[['net_load']].mean()
sns.lineplot(x='hour', y='net_load', data=grouped_dow, hue='day_of_week', 
    palette=sns.color_palette('viridis', as_cmap=True))
Out[ ]:
<Axes: xlabel='hour', ylabel='net_load'>
In [ ]:
grouped_year_dow = df.groupby(['year', 'day_of_week', 'hour', 'minute'])[['net_load']].mean()
sns.lineplot(x='hour', y='net_load', data=grouped_year_dow, hue='year', palette=sns.color_palette('viridis', as_cmap=True))
Out[ ]:
<Axes: xlabel='hour', ylabel='net_load'>
In [ ]:
g = sns.FacetGrid(grouped_year_dow.reset_index(), col='day_of_week', col_wrap=2, 
                  hue='year', palette='viridis')
g.map(sns.lineplot, 'hour', 'net_load')
g.add_legend()
Out[ ]:
<seaborn.axisgrid.FacetGrid at 0x7ff64e062fa0>
In [ ]:
grouped_year_month_dow = df.groupby(['year', 'month', 'day_of_week', 'hour', 'minute'])[['net_load']].mean()
g = sns.FacetGrid(grouped_year_month_dow.reset_index(), row='month', col='day_of_week',
                  hue='year', palette='viridis')
g.map(sns.lineplot, 'hour', 'net_load')
g.add_legend()
Out[ ]:
<seaborn.axisgrid.FacetGrid at 0x7ff64f2b30a0>
In [ ]:
grouped_month_week_dow = df[df.year == 2022].groupby(['year', 'month', 'week_of_month', 'day_of_week', 'hour', 'minute'])[['net_load']].mean() # mean of one observation
g = sns.relplot(
    data=grouped_month_week_dow.reset_index(), x='hour', y='net_load',
    row='month', col='day_of_week', kind='line', errorbar=None,
    hue='week_of_month', style='week_of_month', palette='viridis', legend='full')
In [ ]:
grouped_year_week_dow = df.groupby(['year', 'week', 'day_of_week', 'hour', 'minute'])[['net_load']].mean()
g = sns.relplot(
    grouped_year_week_dow.reset_index(), x='hour', y='net_load', row='week', col='day_of_week',
    hue='year', palette='viridis', style='year', kind='line', legend='full', errorbar=None)